<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
//求和
// const arr = [1,3,4,5,6]
// let total = 0
// arr.forEach(item=>{
//     total += item
// })  
// console.log(1,total)
//reduce 实现：
// const arr = [1,3,4,5,6]
// //reduce(第一个值/上次计算的结果，当前项目，当前项下标，调用的数据)
// const total = arr.reduce((val,item)=>{return val+item },0)
// console.log(2,total)
//链式
// const obj = {
//     name:"zhangsan",
//     info:{
//         address:{
//             addr:"北京 海淀"
//         }
//     }
// }
// console.log(1,obj.info.address.addr)
//reduce 
// const arr = ['info','address','addr']
// const addrs = arr.reduce((newObj,k)=>{
//     console.log(2,newObj,k)
//     return newObj[k]
// },obj)

//第一执行： newObj ==》 obj   k==》info
//第二次执行：newObj --》 info k-->address
//第三次 :nowObj --> address  k ==> addr
//第四次 nowObj
// console.log(3,addrs)
// const attrStr = "info.address.addr"
// const addrs = attrStr.split(".").reduce((newObj,k)=>{
//     // console.log(2,newObj,k)
//     return newObj[k]
// },obj)
// console.log(4,addrs)

//getter setter
// const obj = {
//     a:1,
//     b:2
// }
// console.log(1,obj)

//defineProperty
const obj = {
    name:"zhangsan",
    age:20,
    info:{
        address:{
            addr:"北京海淀"
        }
    }
}
//劫持方法：
Object.defineProperty(obj,name,{
    enumerable:true,//可以被循环
    configurable:true, //允许被设置
    get(){
        return 1111
    },
    set(newVal){
        console.log("设置")
    }
})
console.log(1,obj.name)
obj.name = "lisi"
console.log(obj.name)
</script>
</body>
</html>